home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 361_02 / tmu.c < prev    next >
C/C++ Source or Header  |  1991-09-18  |  2KB  |  62 lines

  1.  
  2. #include <stdek.h>
  3. #include <stdio.h>
  4. #include <gadgets.h>
  5. #include <process.h>
  6. #include <keys.h>
  7.  
  8.  
  9.  
  10. int TMu(char **Mu, int X, int Y, long Color, int Border)
  11. {
  12.     int ch, i, xx, yy, Flag, GreyOut, HiLite, Lit, Selected, Z;
  13.     char *FootPrint;
  14.     extern char HelpTag[20];
  15.  
  16.  /* Save Cursor, Calculate Menu Size & Get Colors */
  17.     Getxy(&xx, &yy); Flag = HideCursor(); if (Mu[0][10] IS '+') Border >>= 8;
  18.     GreyOut = Color & 0xFF; Color >>= 8; HiLite  = Color & 0xFF; Color >>= 8;
  19.     if (Mu[0][10] IS '-') Color = GreyOut;
  20.     for (Z = 1; Mu[Z+1] != NULL ; Z++);
  21.     if ((FootPrint = (char *) malloc(strlen((Mu[1]) + Z+3) * 2)) IS NULL)
  22.        return 0;
  23.  
  24.  /* Build a Drop Box Menu */
  25.     MkAskBox(FootPrint, X, Y, strlen(Mu[1])-1, Z+2, 'R',
  26.        (char *) strchr(*Mu, '['), "[<Esc> to Cancel]", "", Border);
  27.     for (i = 0; i++ < Z; )
  28.         if (Mu[i][2] IS '-') Dwrite(X+1, Y+i, GreyOut,  Mu[i]+3);
  29.         else Dwrite(X+1, Y+i, Color, Mu[i]+3);
  30.     Lit = Selected = 1; Dwrite(X+1, Y+1, HiLite, Mu[1]+3); HideCursor();
  31.  
  32.  /* Querry User */
  33.     do {
  34.        if (Selected != Lit) {
  35.           if (Mu[Lit][2] IS '-') Dwrite(X+1, Y+Lit, GreyOut, Mu[Lit]+3);
  36.           else Dwrite(X+1, Y+Lit, Color, Mu[Lit]+3);
  37.           Lit = Selected; Dwrite(X+1, Y+Lit, HiLite, Mu[Lit]+3);
  38.        }
  39.        switch (ch = Kbq_read()) {
  40.        case F1:
  41.           strncpy(HelpTag, Mu[0], 10); HelpTag[10] = NULL; TisHelp();
  42.           break;
  43.        case DN:   if (Selected++ IS Z) Selected = 1; break;
  44.        case UP:   if (Selected-- IS 1) Selected = Z; break;
  45.        case FWD:
  46.        case BWD:
  47.        case ESC:  Selected = ch = 0; break;
  48.        case CR:   if (Mu[Selected][2] IS '+') ch = 0; break;
  49.        default:
  50.           for (i = 0; ch != SPACE && i++ < Z; )
  51.              if (*Mu[i] IS ch && Mu[i][2] IS '+') {
  52.                 ch = 0; Selected = i; break; }
  53.        }
  54.     } while (ch);
  55.  
  56.  /* Clean Up & Split */
  57.     ZapAskBox(FootPrint, X, Y, strlen(Mu[1])-1, Z+2, 'R'); free(FootPrint);
  58.     Gotoxy(xx, yy); if (Flag) ShowCursor(0);
  59.     return (!Selected || Mu[0][2] IS '-') ? 0 : Mu[Selected][1];
  60. }
  61.  
  62.